import pandas as pd
import yfinance as yf
import numpy as np
import datetime
from plotly import __version__
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import cufflinks as cf
init_notebook_mode(connected=True)
cf.go_offline()
def load_data_intraday(filename):
data = pd.read_csv(filename,
usecols=['Date','Time','Open','High','Low','Close','Up','Down'],
parse_dates=[['Date', 'Time']], )
data.columns = ["date_time","open","high","low","close","up","down"]
data.set_index('date_time', inplace = True)
data['volume'] = data['up'] + data['down']
data.drop(['up','down'],axis=1,inplace=True)
data["dayofweek"] = data.index.dayofweek
data["day"] = data.index.day
data["month"] = data.index.month
data["year"] = data.index.year
data["dayofyear"] = data.index.dayofyear
data["quarter"] = data.index.quarter
data["hour"] = data.index.hour
data["minute"] = data.index.minute
return data
def load_data_new(filename):
data = pd.read_csv(filename, parse_dates=['date_time'], index_col='date_time')
return data
dataset1 = load_data_new('PLATINUMmerged_60min.txt')
def YF_data(ticker,name,start,end):
data = yf.download(ticker, start=start, end=end, interval="60m")
data.index = data.index.tz_localize(None) # Remove timezone information
data = data.drop(["Adj Close"], axis=1)
data["open"] = data["Open"]
data["high"] = data["High"]
data["low"] = data["Low"]
data["close"] = data["Close"]
data["volume"] = data["Volume"]
data = data.drop(["Open", "High", "Low", "Close", "Volume"], axis=1)
data["dayofweek"] = data.index.dayofweek
data["day"] = data.index.day
data["month"] = data.index.month
data["year"] = data.index.year
data["dayofyear"] = data.index.dayofyear
data["quarter"] = data.index.quarter
data["hour"] = data.index.hour
data["minute"] = data.index.minute
data = data.rename_axis("date_time")
save = data.to_csv(name)
return data
def strategy_vs_hold(dataset, hour_entry, hour_exit, name):
dataset["ret"] = dataset.close.pct_change()
dataset["mp"] = np.where((dataset["hour"] > hour_entry) | (dataset["hour"] < hour_exit), 1, 0)
dataset["Portfolio ret"] = dataset["ret"] * dataset["mp"]
df = pd.DataFrame({
"STRATEGY" + name: dataset["Portfolio ret"].cumsum(),
"HOLD"+ name: dataset["ret"].cumsum()
})
df.iplot(kind = "line", title="STRATEGY VS HOLD " +name, colors = ["orange","blue"], theme="white")
return df
dataset2 = load_data_intraday('@HG_60min_Exchange.txt')
copperdata = strategy_vs_hold(dataset2, 8, 0, name= "Copper")
dataset2 = load_data_intraday('@PL_60min_Exchange.txt')
platinumdata = strategy_vs_hold(dataset2, 10, 3, name="Platinum")
dataset3 = YF_data("PL=F",'PL_60min.txt', start="2022-03-01", end="2024-01-01")
platinumdata_now = strategy_vs_hold(dataset3, 10, 3, name="Platinum")
[*********************100%%**********************] 1 of 1 completed
dataset4 = YF_data("HG=F",'HG_60min.txt',start="2022-03-01", end="2024-01-01")
copperdata_now = strategy_vs_hold(dataset4, 8, 0, name="Copper")
[*********************100%%**********************] 1 of 1 completed
dataset5 = YF_data("HG=F",'HG_60min_lastmonth.txt',start="2024-01-10", end="2024-02-18")
copperdata_now = strategy_vs_hold(dataset4, 8, 0, name="Copper")
[*********************100%%**********************] 1 of 1 completed
dataset6 = YF_data("PL=F",'PL_60min_lastmonth.txt', start="2024-01-10", end="2024-02-18")
platinumdata_now = strategy_vs_hold(dataset3, 10, 3, name="Platinum")
[*********************100%%**********************] 1 of 1 completed